import userApi from "@/api/user.js";

const state = {
    // 设备信息
    deviceInfo: uni.getStorageSync("deviceInfo") || {
        tabbarHeight: 50, // px,底部高度
        navbarHeight: 44, // px,导航栏高度
    },
    activeTabbar: 0, // 当前选中tabbar
    userInfo: uni.getStorageSync("userInfo") || {}, // 用户信息对象
    expInfo: uni.getStorageSync("expInfo") || {}, // 专家用户信息对象
    userType: 1, // 当前身份 1: 用户  0: 专家
    showPrivacy: false, // 是否弹出隐私协议弹窗
    sessionObj: {}, // 临时存储对象-使用完记得置空
    webviewUrl: "", // webview路径
    isReset: false
}

const mutations = {
    // 设置设备信息
    SET_DEVICEINFO(state, data) {
        state.deviceInfo = Object.assign(state.deviceInfo, data)
        uni.setStorageSync("deviceInfo", state.deviceInfo);
    },
    // 设置当前选中tabbar
    SET_ACTIVETABBAR(state, data) {
        state.activeTabbar = data
    },
    // 设置用户信息
    SET_USERINFO(state, data) {
        state.userInfo = data
        uni.setStorageSync("userInfo", data);
    },
    // 设置当前账号专家信息
    SET_EXPINFO(state, data) {
      state.expInfo = data
      uni.setStorageSync("expInfo", data);
    },
    // 设置当前身份
    SET_USERTYPE(state, data) {
      state.userType = data
    },
    // 设置隐私协议授权状态
    SET_SHOWPRIVACY(state, data) {
      state.showPrivacy = data
    },
    // 设置临时存储对象
    SET_SESSIONOBJ(state, data) {
        state.sessionObj = data
    },
    // 设置webview路径
    SET_WEBVIEWURL(state, url) {
        state.webviewUrl = url
    },
    // 设置是否刷新
    SET_ISRESET(state, data) {
        state.isReset = data
    }
}
const actions = {
    /**
     * 获取手机号登录方法
     * @returns {Promise<any>}
    */
    getPhoneNumber({ commit, dispatch }, e) {       
        const { code } = e.detail;
        return new Promise((resolve, reject) => {
            if (code) {
                uni.login({
                    success(res) {
                        const openIdCode = res.code;
                        if (openIdCode) {
                            // 手机号登录
                            userApi.login({ code }).then((res) => {
                                commit("SET_USERINFO", res.data);
                                if (!res.data.openid) {
                                    userApi.getOpenId({ code: openIdCode }).then(() => {
                                        console.log("绑定OPENID成功");
                                    });
                                }
                                
                                dispatch("loginIm"); // 登陆腾讯IM
                                resolve(res.data)
                            });
                        } else {
                            reject('授权失败')
                            uni.showToast({
                                title: "授权失败,请重新授权",
                                icon: "none",
                            });
                        }
                    },
                });
            }else{
                reject('用户拒绝授权手机号')
            }
        })

    },
    /**
     * 获取，更新用户信息
     * @returns {Promise<any>}
    */
    getUserInfo({ state, commit, dispatch }) {
        if (state.userInfo.token) {
            return new Promise(resolve => {
                userApi.getUserInfo().then(r => {
                    commit('SET_USERINFO', r.data)
                    if(r.data.status !== '3'){ // 不在线则更改为上线
                        dispatch("reportStatus", {status: 3})
                    }
                    // 用户没有openID的异常情况
                    if(!r.data.openid){
                        uni.login({
                            success(res) {
                                const openIdCode = res.code;
                                userApi.getOpenId({ code: openIdCode }).then(() => {
                                    console.log("绑定OPENID成功");
                                });
                            },
                            fail(err){
                                uni.showToast({
                                    title: '绑定openID失败,请删除小程序再次进入,否则将影响消息推送等功能',
                                    icon: 'none',
                                    duration: 5000
                                })
                            }
                        })
                    }
                    resolve(r.data)
                })
            })
        }
    },
    // 退出登录
    loginOut({ state }) {
        state.userInfo = {}
        uni.clearStorageSync();
    }
}

export default {
    state,
    mutations,
    actions
}